环境搭建
Android SDK
android sdk 工具包的一些命令行工具是基于32位系统的,在64为平台运行32程序必须安装 i386 的一些依赖库,方法如下:
1 | # aapt |
安装完成32位的依赖库后,我们使用wget 去官方下载最新的linux下android SDK包。
1 | wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz |
编辑 .profile 或者 .bash_profile 把下面的目录增加到 path的搜索路径中,确保android SDK的的一些命令工具可以直接在终端使用,比如 adb 命令。 ANDROID_HOME=$HOME/android-sdk-linux PATH=”$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools”
使环境变量生效
1 | source ~/.profile |
环境变量生效后,你可以使用android命令 列出sdk相关的列表,以便我们选择和自己项目匹配的SDK版本。(刚才只是安装了最基础的SDK,要完全满足你的开发环境需要还得从下面的列表中选择你需要的SDK和工具更新下载)
1 | android list sdk --all |
输出如下所示:
1 | Packages available for installation or update: 176 |
这里包括不同的Android API 版本和不同的构建工具,选择你想要安装项目的序号,这里我想安装 build tools 25 ,build tools 25 及 android 4.4以上的SDK所以选择序号 “1,2,3,4,5,37,38,39,40,41”
android update sdk -u -a -t 1,2,3,4,5,37,38,39,40,41
Gradle 3.3
wget https://services.gradle.org/distributions/gradle-3.3-bin.zip
释放到本地Home目录,创建名字为”gradle”的符号链接,符号连接的好处是方便版本更新,有了新的版本直接修改符号链接即可。
1 | unzip gradle-2.12-bin.zip |
配置gradle环境变量并使其生效,编辑 ~/.profje 文件增加下面内容
1 | GRADLE_HOME=$HOME/gradle |
保存后使环境变量使其生效 source ~/.profile
环境变量生效后你可以在终端敲入’gradle’命令并运行用以检测gradle是否安装成功。
gradle
如果安装配置的没有问题将会提示类似下面的信息
1 | :help |
签名详解
生成秘钥
keytool: 是一个Java数据证书的管理工具,keytool 将密钥(key)和证书(certificates)存在一个keystore的文件中,或者是jks的文件
命令
1 | -genkey: 在用户目录中创建一个默认.keystore文件 |
一次性生成Key
keytool -genkey -alias $ALIAS -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore $PATH -storepass 123456 -dname "CN=fanle, OU=xx, O=xx, L=xx, ST=xx, C=xx"
签名 APK
1 | # 输入完整信息签名一个应用,注意填写[]中对应的内容 |
校验签名
1 | # 查看一个路径为 [verifyApkPath] 的APK 是否签名 |
查看签名文件信息
1 | # 查看一个路径为 [keystorePath] 的签名文件的信息,需要签名的库密码 |
构建
动态参数
|–参数名-|参数类型| 参数值列表| BUILD_TYPE Choice Release or Debug IS_JENKINS Choice true PRODUCT_FLAVORS Choice Xiaomi 、Wandoujia等 BUILD_TIME Dynamic Parameter 2016-12-21-11-11 APP_VERSION Choice 1.0.0、1.0.1等 GIT_TAG Git Parameter tag1.0.0等
构建触发器
Jenkins支持上图所示的触发时机配置,如果都不选,则为手动构建,需要点击”立即构建”按钮才构建。
Build periodically:周期进行项目构建(它不关心源码是否发生变化); Build when a change is pushed to GItHub:表示只要GitHub上面源码一更新即进行构件; Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
Build periodically和Poll SCM都支持日程表的设置,这个与Spring框架中定时器的日程表配置类似,有5个参数:
第一个参数代表的是分钟 minute,取值 0~59; 第二个参数代表的是小时 hour,取值 0~23; 第三个参数代表的是天 day,取值 1~31; 第四个参数代表的是月 month,取值 1~12; 最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
如:
选择Build periodically并设置日程表为”0 4 “,则表示每天凌晨4点构建一次源码。 选择Poll SCM并设置日程表为”/10 “,则表示每10分钟检查一次源码变化,如果有更新才进行构建。
上传S3
环境搭建
1 | 安装pip |
build description
在持续集成过程中,随着feature的不断加入,版本越来越多,你希望每个build成功之后能显示一些很重要的信息,比如版本号,当前该build支持的主要feature等。
这样不论是开发还是测试,在拿build的时候都能一眼就看出该build对应的版本号以及主要的feature。
使用description setter plugin。安装该插件后,在【Post-build Actions】栏目中会多出description setter功能,可以实现构建完成后设置当次build的描述信息。这个描述信息不仅会显示在build页面中,同时也会显示在历史构建列表中。 该功能的强大之处在于,它可以在构建日志中通过正则表达式来匹配内容,并将匹配到的内容添加到BuildDescription中去。
1 | <img src='http://justdownit.s3.amazonaws.com/apps/gkt/android_jenkins/qrcode/${APP_NAME}_${PRODUCT_FLAVORS}_${BUILD_TYPES}_v${APP_VERSION}.png'></img> |
展示二维码图片
有了这个前提,要将二维码图片展示在历史构建列表中貌似就可以实现了,能直观想到的方式就是采用HTML的img标签,将<img src='qr_code_url'>
写入到build描述信息中。
这个方法的思路是正确的,不过这么做以后并不会实现我们预期的效果。
这是因为Jenkins出于安全的考虑,所有描述信息的Markup Formatter默认都是采用Plain text模式,在这种模式下是不会对build描述信息中的HTML编码进行解析的。
要改变也很容易,Manage Jenkins -> Configure Global Security,将Markup Formatter的设置更改为Safe HTML即可。
更改配置后,我们就可以在build描述信息中采用HTML的img标签插入图片了。
另外还需要补充一个点。如果是使用蒲公英(pyger)平台,会发现每次上传安装包后返回的二维码图片是一个短链接,神奇的是这个短连接居然是固定的(对同一个账号而言)。这个短连接总是指向最近生成的二维码图片,但是对于二维码图片的唯一URL地址,平台并没有在响应中进行返回。在这种情况下,我们每次构建完成后保存二维码图片的URL链接就没有意义了。
应对的做法是,每次上传完安装包后,通过返回的二维码图片短链接将二维码图片下载并保存到本地,然后在build描述信息中引用该图片的Jenkins地址即可。
Jenkins 权限组分配
脚本
见git:http://git.dy/gkt/testjenkins/tree/master
FAQ
Jenkins 在Linux下出现权限等问题
- 进入/etc/default/目录 在jenkins文件中修改JENKINS_USER=”root”
- 重启Jenkins服务
编译出现 AAPT: \?\C:\Windows\System32\config\systemprofile_*_等错误
原因:因为本地Jenkins Service 的账号使用了系统账户登录, 解决方案:在Service 列表中找到Jenkins服务,在属性中选择登录选项卡,选用具体的桌面用户账号登录,再重启服务即可.